# coding=utf-8

from application import app, redis
from common.libs.JsonLibs import bytes_to_obj
from app.model.mysql.game_item import GameItem as GameItemMysql
from app.model.redis.game_item import GameItem as GameItemRedis
from app.json.mysql.game_item import GameItem as GameItemJson


def get_one(gi_id):
    redis_gi_one = redis.get(GameItemRedis.game_item_one.key % gi_id)
    if redis_gi_one:
        mysql_gi_one = None
    else :
        mysql_gi_one = GameItemMysql.query.filter(GameItemMysql.id == gi_id, GameItemMysql.is_delete == 0).first()
    if mysql_gi_one:
        setInRedis(mysql_gi_one)
        gi_json = GameItemJson(mysql_gi_one).getJson()
    else :
        gi_json = bytes_to_obj(redis_gi_one)
    return gi_json


def get_list():
    redis_gi_set = redis.smembers(GameItemRedis.game_item_one.key)
    redis_gi_list = list(redis_gi_set)
    redis_gi_list = redis_gi_list if redis_gi_list else []
    result_list = []
    if not redis_gi_list:
        mysql_gi_list = GameItemMysql.query.filter(GameItemMysql.is_delete == 0).all()
        for mysql_gi_one in mysql_gi_list:
            setInRedis(mysql_gi_one)
            gi_one_json = GameItemJson(mysql_gi_one).getJson()
            result_list.append(gi_one_json)
        return result_list
    else:
        for gi_id in redis_gi_list:
            gi_one_json = get_one(gi_id.decode("utf-8"))
            result_list.append(gi_one_json)
        return result_list


def setInRedis(mysql_gi_one):
    redis.sadd(GameItemRedis.game_item_set.key, mysql_gi_one.id)
    redis.set(GameItemRedis.game_item_one.key % mysql_gi_one.id, GameItemJson(mysql_gi_one).getJsonToRedis())
